<!-- XHTML 1.0 Strict -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<meta name="author" content="Rachid Touzani" />
<meta name="keywords" content=" css, dropdowns, dropdown menu, drop-down, menu, navigation, nav, horizontal, vertical left-to-right, vertical right-to-left, horizontal linear, horizontal upwards, cross browser, internet explorer, ie, firefox, safari, opera, browser, lwis" />
<meta name="description" content="Clean, standards-friendly, modular framework for dropdown menus" />
<link href="../css/dropdown.vertical.css" media="screen" rel="stylesheet" type="text/css" />
<link href="../css/default.ultimate.css" media="screen" rel="stylesheet" type="text/css" />

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Demonstration of class TimeStepping usage</title>
<link rel="stylesheet" type="text/css" href="../doxygen.css" />
<link rel="stylesheet" type="text/css" href="../tabs.css"  />
</head>

<body bgcolor="#FFFFFF" link="#FF0000" vlink="#FF00FF" alink="#FF00FF">
<p align="center"><a href="../index.html"><img src="../im/ofeli.gif" width="150" border="0"></a></p>

<center>
  <div id="cse" style="width: 60%;">Loading</div>
  <script src="http://www.google.com/jsapi" type="text/javascript"></script>
  <script type="text/javascript"> 
     google.load('search', '1', {language : 'en', style : google.loader.themes.SHINY});
     google.setOnLoadCallback(function() {
        var customSearchOptions = {};  var customSearchControl = new google.search.CustomSearchControl(
        '012396140824982761142:-qrywxcfi_o', customSearchOptions);
        customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
        customSearchControl.draw('cse');
     }, true);
   </script>
   <style type="text/css">
     .gsc-control-cse {
     font-family: Verdana, sans-serif;
     border-color: #DAE0E5;
     background-color: #DAE0E5;
   }
   .gsc-control-cse .gsc-table-result { font-family: Verdana, sans-serif; }
   input.gsc-input { border-color: #B6BEC5; }
   input.gsc-search-button {
     border-color: #B6BEC5;
     background-color: #D0D1D4;
   }
   .gsc-tabHeader.gsc-tabhInactive {
     border-color: #999999;
     background-color: #EEEEEE;
   }
   .gsc-tabHeader.gsc-tabhActive {
     border-color: #999999;
     background-color: #999999;
   }
   .gsc-tabsArea { border-color: #999999; }
   .gsc-webResult.gsc-result,
   .gsc-results .gsc-imageResult {
     border-color: #FFFFFF;
     background-color: #FFFFFF;
   }
   .gsc-webResult.gsc-result:hover,
   .gsc-imageResult:hover {
     border-color: #D2D6DC;
     background-color: #EDEDED;
   }
   .gsc-webResult.gsc-result.gsc-promotion:hover {
     border-color: #D2D6DC;
     background-color: #EDEDED;
   }
   .gs-webResult.gs-result a.gs-title:link,
   .gs-webResult.gs-result a.gs-title:link b,
   .gs-imageResult a.gs-title:link,
   .gs-imageResult a.gs-title:link b { color: #0568CD; }
   .gs-webResult.gs-result a.gs-title:visited,
   .gs-webResult.gs-result a.gs-title:visited b,
   .gs-imageResult a.gs-title:visited,
   .gs-imageResult a.gs-title:visited b { color: #0568CD; }
   .gs-webResult.gs-result a.gs-title:hover,
   .gs-webResult.gs-result a.gs-title:hover b,
   .gs-imageResult a.gs-title:hover,
   .gs-imageResult a.gs-title:hover b { color: #0568CD; }
   .gs-webResult.gs-result a.gs-title:active,
   .gs-webResult.gs-result a.gs-title:active b,
   .gs-imageResult a.gs-title:active,
   .gs-imageResult a.gs-title:active b { color: #0568CD; }
   .gsc-cursor-page { color: #0568CD; }
   a.gsc-trailing-more-results:link { color: #0568CD; }
   .gs-webResult .gs-snippet,
   .gs-imageResult .gs-snippet,
   .gs-fileFormatType { color: #5F6A73; }
   .gs-webResult div.gs-visibleUrl,
   .gs-imageResult div.gs-visibleUrl { color: #5F6A73; }
   .gs-webResult div.gs-visibleUrl-short { color: #5F6A73; }
   .gs-webResult div.gs-visibleUrl-short { display: none; }
   .gs-webResult div.gs-visibleUrl-long { display: block; }
   .gs-promotion div.gs-visibleUrl-short { display: none; }
   .gs-promotion div.gs-visibleUrl-long { display: block; }
   .gsc-cursor-box { border-color: #FFFFFF; }
   .gsc-results .gsc-cursor-box .gsc-cursor-page {
      border-color: #999999;
      background-color: #FFFFFF;
      color: #0568CD;
   }
   .gsc-results .gsc-cursor-box .gsc-cursor-current-page {
      border-color: #999999;
      background-color: #999999;
      color: #0568CD;
   }
   .gsc-webResult.gsc-result.gsc-promotion {
      border-color: #D2D6DC;
      background-color: #D0D1D4;
   }
   .gsc-completion-title { color: #0568CD; }
   .gsc-completion-snippet { color: #5F6A73; }
   .gs-promotion a.gs-title:link,
   .gs-promotion a.gs-title:link *,
   .gs-promotion .gs-snippet a:link { color: #0066CC; }
   .gs-promotion a.gs-title:visited,
   .gs-promotion a.gs-title:visited *,
   .gs-promotion .gs-snippet a:visited { color: #0066CC; }
   .gs-promotion a.gs-title:hover,
   .gs-promotion a.gs-title:hover *,
   .gs-promotion .gs-snippet a:hover { color: #0066CC; }
   .gs-promotion a.gs-title:active,
   .gs-promotion a.gs-title:active *,
   .gs-promotion .gs-snippet a:active { color: #0066CC; }
   .gs-promotion .gs-snippet,
   .gs-promotion .gs-title .gs-promotion-title-right,
   .gs-promotion .gs-title .gs-promotion-title-right *  { color: #333333; }
   .gs-promotion .gs-visibleUrl,
   .gs-promotion .gs-visibleUrl-short { color: #5F6A73; }
   </style>
</center>
</p>
&nbsp;

<div id="mainmenu">
<div class="text">

 <div class="tabs">
   <ul class="tablist">
   <li><a href="../index.html"><span>Home</span></a>
   <li><a href="../overview.html"><span>Overview</span></a>
   <li><a href="../html/index.html"><span>Class Documentation</span></a>
   <li><a href="../fformats.html"><span>File Formats</span></a>
   <li><a href="../tutorial.html"><span>Tutorial</span></a>
   <li class="current"><a href="../demos.html"><span>Demo Codes</span></a>
 </div>

 </div>
 </div>

&nbsp;
<p>
 <h2>Demonstration of class TimeStepping usage:<br>
     Solution of the time dependent heat equation</h2>

<p><table border="2" cellpadding="2" cellspacing="0" >
<tr>
<td align="center" width="35"><a href="ode_demo4.html"><img src="../im/backward.gif" border="0"></a></td>
<td align="center" width="35"><a href="../demos.html"><img src="../im/top.gif" border="0"></a></td>
<td align="center" width="35"><a href="ts_demo2.html"><img src="../im/forward.gif" border="0"></a></td>
</tr>
</table></p>

<p>
<SPAN class=TEXT>
We present a program to solve the time dependent 2-D heat equation using
the P<sub>1</sub> finite element method for space discretization and
one of the available time integration schemes for time discretization.
To validate the code, we test the exact solution
<pre><font color="blue" size=3>   u(x,y) = exp(-t)*exp(x+y)</font></pre>
This gives as a source term, in the case where all coefficients are
equal to 1:
<pre><font color="blue" size=3>   f(x,y) = -3*exp(-t)*exp(x+y)</font></pre>

<ul type=square>
<li><SPAN class=TEXT>We start, as usual, by including the main header
file of the library, and the header for thermal problems.
The program has, as argument the mesh file and the time step.
We construct a <a href="../html/classOFELI_1_1Mesh.html">Mesh</a>
instance with the flag that enables eliminating imposed boundary conditions.
Note that the final time value is also set by using the OFELI global
variable <span class=VAR>theFinalTime</span>.
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>#include "OFELI.h"
#include "Therm.h"
using namespace OFELI;

int main(int argc, char *argv[])
{
   theFinalTime = 1.;
   Mesh ms(argv[1],true);
   theTimeStep = atof(argv[2]);
</font></pre>
</td></tr></table></p>

<li><SPAN class=TEXT>We declare the vectors <span class=VAR>u</span>, <span class=VAR>f</span>
and <span class=VAR>bc</span> that are respectively the solution
vector, the vector containing the source, and the vector containing
imposed boundary values. We then introduce the initial condition by
assigning the corresponding algebraic expression to the solution vector.<br>

We construct an instance of class
<a href="../html/classOFELI_1_1DC2DT3.html">DC2DT3</a> using
the <a href="../html/classOFELI_1_1Mesh.html">Mesh</a> instance and
choose the terms of the equation. Here the equation contains the
(consistent) capacity, the diffusion and the source terms.<br>

We can then declare the time integration scheme by instantiating the class
<a href="../html/classOFELI_1_1TimeStepping.html">TimeStepping</a>. Clearly, the
backward (implicit) Euler scheme is used. To this instance, we
transmit the equation reference and set initial solution vector. Note
that the solution will be stored in this vector. We also choose the conjugate
gradient method preconditioned by the diagonal ILU preconditioner.
</span></p>

<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   Vect&lt;double&gt; u(ms), f(ms), bc(ms);
   u.set("exp(x+y)");

   DC2DT3 eq(ms);
   eq.setTerms(CAPACITY|DIFFUSION|SOURCE);

   TimeStepping ts(BACKWARD_EULER,theTimeStep,theFinalTime);
   ts.setPDE(eq);
   ts.setInitial(u);
   ts.setLinearSolver(CG_SOLVER,DILU_PREC);
</font></pre>
</td></tr></table></p>

<li><SPAN class=TEXT>We can now loop over time steps. For each time
step, we give the source terms, which is time dependent and transfer
it to the instance of <a href="../html/classOFELI_1_1TimeStepping.html">TimeStepping</a>.
The same treatment is realized for the Dirichlet boundary condition. Finally
we run the time step. Note that the vector <span class=VAR>u</span> contains
now the solution at the current time.
</span></p>
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   TimeLoop {
      f.setTime(theTime);
      f.set("-3*exp(-t)*exp(x+y)");
      ts.setRHS(f);

      bc.setTime(theTime);
      bc.setNodeBC(1,"exp(-t)*exp(x+y)");
      ts.setBC(bc);

      ts.runOneTimeStep();
   }
</font></pre>
</td></tr></table></p>

<li><SPAN class=TEXT>We end by printing the
<a href="../html/classOFELI_1_1TimeStepping.html">TimeStepping</a>
instance information. To compute error, we consider the vector <span
class=VAR>U</span> containing the exact solution at nodes, and compute
an error norm.
</span></p>

<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   cout &lt;&lt; ts;
   Vect&lt;double> U(ms,"u_ex",theFinalTime);
   U.set("exp(-1)*exp(x+y)");
   cout &lt;&lt; "Error in L2-Norm: " &lt;&lt; (u-U).getWNorm2() &lt;&lt; endl;
   return 0;
}
</font></pre>
</td></tr></table>
</ul>

<p><table align="center" border="2" cellpadding="2" cellspacing="0" >
<tr>
<td align="center" width="35"><a href="ode_demo4.html"><img src="../im/backward.gif" border="0"></a></td>
<td align="center" width="35"><a href="../demos.html"><img src="../im/top.gif" border="0"></a></td>
<td align="center" width="35"><a href="ts_demo2.html"><img src="../im/forward.gif" border="0"></a></td>
</tr>
</table>

&nbsp;
<div id="foot_bar">
        Copyright &copy; 1998-2018 Rachid Touzani&nbsp;
</div>

</body>
</html>
